今天來介紹一下 XSS,在要寫鐵人賽之前,我也只知道基本的原理,如果大家有什麼想要補充的,歡迎留言告訴我!
依照腳本注入的位置不同,大致可分為 3 種:
這邊有個簡單的頁面
@app.route('/')
def index():
search_query = request.args.get('name', '')
html_response = f"<p>Your name is: {search_query}</p>"
return html_response
我們在 name
中帶入這段惡意腳本:<script>alert('XSS Attack');</script>
連結會變成這樣:http://localhost/?name=<script>alert('XSS Attack');</script>
這時使用者如果點擊了這個連結,伺服器回傳的 response 中就會包含這段惡意腳本,前端的 JS 就會執行這段程式碼。
如果你覺得這段連結一看就很可疑,還可以用 URL encode 來降低戒心:http://localhost/?name=%3Cscript%3Ealert('XSS%20Attack')%3B%3C%2Fscript%3E
上面這個例子就屬於前一節提到的反射型 XSS
XSS 除了自己本身的威力以外,還可以和其他手法,例如 CSRF 組成組合技,底下那篇 Cymetrics 部落格的文章就有提到現實世界中的案例,有興趣的務必去了解一下!
至於 CSRF 應該在後面的篇幅中會提到,還請大家繼續收看 XD
零基礎資安系列(二)-認識 XSS(Cross-Site Scripting)